/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: Frank
 * 系统版本: 1.0.0
 * 开发人员: Frank
 * 开发时间: 2019/12/20 14:42
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.spring.arch.uaa.dto;

import com.spring.arch.uaa.enums.AuthorityType;
import com.spring.arch.uaa.enums.ControlRange;
import com.spring.arch.uaa.enums.ModuleType;
import com.spring.arch.common.dto.AbstractLogicalDTO;
import com.spring.arch.uaa.enums.AuthorityType;
import com.spring.arch.uaa.enums.ControlRange;
import com.spring.arch.uaa.enums.ModuleType;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.http.HttpMethod;

import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 资源权限
 *
 * @author Frank
 * @version 1.0.0.1
 * @since 2019/12/20 14:42
 */
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Getter
@Setter
public class AuthorityDTO extends AbstractLogicalDTO {

    private static final long serialVersionUID = 4263297013037843748L;

    /**
     * 父级资源id
     */
    @ApiModelProperty(value="父级资源id")
    private UUID parentId;

    /**
     * 资源编码
     */
    @ApiModelProperty(value="资源编码")
    private String code;

    /**
     * 资源名称
     */
    @ApiModelProperty(value="资源名称")
    private String name;

    /**
     * 资源中文名称
     */
    @ApiModelProperty(value="资源中文名称")
    private String cname;

    /**
     * 资源权限类型
     */
    @ApiModelProperty(value="资源权限类型")
    private AuthorityType type;

    /**
     * 管控范围
     */
    @ApiModelProperty(value="管控范围", required = true, allowableValues = "range[1, 32]")
    @NotNull
    private ControlRange controlRange;

    /**
     * 模块类型
     */
    @ApiModelProperty(value="模块类型", required = true, allowableValues = "range[1, 32]")
    @NotNull
    private ModuleType moduleType;

    /**
     * 资源链接（只有type是URL时适用）
     */
    @ApiModelProperty(value="资源链接（只有type是URL时适用）")
    private String path;

    /**
     * http请求方式
     */
    @ApiModelProperty(value="http请求方式（只有type是URL时适用）")
    private HttpMethod httpMethod;

    /**
     * 菜单图标（只有type是MENU、PAGE、BUTTON时适用）
     */
    @ApiModelProperty(value="菜单图标（只有type是MENU、PAGE、BUTTON时适用）")
    private String icon;

    /**
     * 资源排序号
     */
    @ApiModelProperty(value="资源排序号")
    private int sequence;

    /**
     * 组件
     */
    private String component;

    /**
     * 是否为隐藏菜单
     */
    private Boolean hideInMenu;

    /**
     * 子菜单
     */
    private List<AuthorityDTO> routes = new ArrayList<>();
}